let udp = null;

// pages/device/add/add.js
Page({
  /**
   * 页面的初始数据
   */
  data: {
    currentStep: 1, // 当前步骤，1、2或3
    totalSteps: 3, // 总步骤数
    selectedWifi: "", // 选中的 WiFi 名称
    showPassword: false, // 是否显示密码
    isConnecting: false, // 是否正在连接
    showConnectingToast: false, // 是否显示底部提示条
    skipGuide: false, // 是否跳过新手指引
    showWifiConnectTip: false, // 是否显示WiFi连接提示层
    deviceWifiName: "chiyu_xxxxx", // 设备WiFi名称

    ssidList: [], // WiFi 列表
    selectedIndex: 0, // 选中的 WiFi 索引
    password: "", // WiFi 密码
    connected: false, // 是否连接
    searching: true, // 是否正在搜索
    isPairing: false, // 是否正在配网
    carIP: "", // 小车 IP
    logList: [], // 日志列表
  },

  /**
   * 生命周期函数--监听页面加载
   * // ------------------------- ✅ 页面加载 -------------------------
   */
  onLoad(options) {
    this.addLog("小程序启动，自动搜索小车中...");
    this.listenUDP();
    setTimeout(() => {
      if (!this.data.connected) {
        this.setData({ searching: false });
        this.addLog("未发现小车，准备进入配网页");
      }
    }, 2000);
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {},

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {},

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {},

  // ------------------------- ✅ 日志记录 -------------------------
  addLog(msg) {
    console.log(`[${new Date().toLocaleTimeString()}] ${msg}`);
    const list = this.data.logList;
    list.push(`[${new Date().toLocaleTimeString()}] ${msg}`);
    this.setData({ logList: list });
  },

  // ------------------------- ✅ 扫描 WiFi -------------------------
  scanWiFiList() {
    this.addLog("尝试获取WiFi列表...");
    if (!this.data.carIP) {
      this.addLog("未连接小车，无法扫描WiFi列表");
      return;
    }
    wx.request({
      url: `http://${this.data.carIP}/scan`,
      method: "GET",
      success: (res) => {
        if (Array.isArray(res.data)) {
          this.setData({
            ssidList: res.data,
            selectedIndex: 0,
            isPairing: true,
          });
          this.addLog("WiFi列表获取成功");
        } else {
          this.addLog("WiFi列表格式异常");
        }
      },
      fail: () => {
        this.addLog(`无法访问${this.data.carIP}，请确认连接了热点 ${this.data.deviceWifiName}`);
        wx.showModal({
          title: "提示",
          content: `请连接热点 ${this.data.deviceWifiName}`,
          showCancel: false,
        });
      },
    });
  },

  // ------------------------- ✅ 配网发送 -------------------------
  sendWiFiConfig() {
    const ssid = this.data.ssidList[this.data.selectedIndex];
    const password = this.data.password;
    if (!password) {
      wx.showToast({ title: "请输入密码", icon: "none" });
      return;
    }
    this.addLog(`发送配网请求：${ssid}`);
    wx.request({
      url: `http://${this.data.carIP}/connect`,
      method: "POST",
      header: { "Content-Type": "application/x-www-form-urlencoded" },
      data: { ssid, password },
      success: (res) => {
        if (res.data === "Connected successfully!") {
          this.setData({ isPairing: false });
          this.addLog("配网成功，请将手机连接回家庭WiFi");
          wx.showModal({
            title: "提示",
            content: "小车已连接家庭WiFi，请将手机也连接相同网络，小程序将自动识别",
            showCancel: false,
            success: () => {
              wx.navigateBack();
            }
          });
        } else {
          this.addLog("配网失败，可能密码错误");
        }
      },
      fail: () => {
        this.addLog("配网请求失败");
      },
    });
  },

  // ------------------------- ✅ UDP 广播监听 -------------------------
  listenUDP() {
    this.addLog("监听UDP端口 4210 中...");
    udp = wx.createUDPSocket();
    udp.bind(4210);
    udp.onMessage((res) => {
      const msg = String.fromCharCode.apply(null, new Uint8Array(res.message));
      if (msg.startsWith("connected@")) {
        const ip = msg.split("@")[1];
        if (!this.data.connected) {
          this.setData({
            carIP: ip,
            connected: true,
            searching: false,
            isPairing: false,
          });
          this.addLog(`小车上线，IP=${ip}`);
          wx.showToast({ title: "已连接小车", icon: "success" });
          udp.send({ address: ip, port: 4210, message: "9" });

          // 扫描WiFi列表
          this.scanWiFiList();
        }
      }
    });
  },

  /**
   * 下一步按钮点击事件
   */
  onNextStep() {
    if (this.data.currentStep < this.data.totalSteps) {
      this.setData({
        currentStep: this.data.currentStep + 1,
      });
    }
  },

  /**
   * 添加设备按钮点击事件 - 进入第三步
   */
  onAddDevice() {
    // 获取当前连接的wifi名称
    wx.startWifi({
      success: (res) => {
        console.log("调用 startWifi 成功:", res);
        wx.getConnectedWifi({
          success: (res) => {
            console.log("当前连接的wifi名称:", res.wifi.SSID);
            if (!res.wifi.SSID.startsWith("chiyu_")) {
              // 显示WiFi连接提示层（设备热点名称，根据设备端配置应为chiyu_setup）
              this.setData({
                showWifiConnectTip: true,
                deviceWifiName: "chiyu_xxxxx" // 设备端热点名称，可根据实际情况修改
              });
              return;
            }
          },
          fail: (err) => {
            console.log("获取当前连接的wifi名称失败:", err);
          },
        });

        return;
      },
      fail: (err) => {
        console.log("调用 startWifi 失败:", err);
      },
    });

    // 切换到第三步：WiFi 配置
    this.setData({
      currentStep: 3,
    });
  },

  /**
   * WiFi 选择事件
   */
  onWifiSelect(e) {
    const index = e.detail.value;
    const selectedWifi = this.data.ssidList[index];
    this.setData({
      selectedIndex: index,
      selectedWifi: selectedWifi.name,
    });
  },

  /**
   * 密码输入事件
   */
  onPasswordInput(e) {
    this.setData({
      password: e.detail.value,
    });
  },

  /**
   * 确认连接按钮点击事件
   */
  onConfirmConnect() {
    if (!this.data.selectedWifi) {
      wx.showToast({
        title: "请选择WiFi",
        icon: "none",
      });
      return;
    }
    if (!this.data.password) {
      wx.showToast({
        title: "请输入WiFi密码",
        icon: "none",
      });
      return;
    }
    // 显示连接状态
    this.setData({
      isConnecting: true,
      showConnectingToast: true,
    });
    // TODO: 实现连接逻辑
    console.log("连接WiFi:", {
      ssid: this.data.selectedWifi,
      password: this.data.password,
    });
    this.sendWiFiConfig();
  },

  /**
   * 跳过新手指引复选框变化事件
   */
  onSkipGuideChange(e) {
    const skipGuide = e.detail.value.includes("skip");
    this.setData({
      skipGuide: skipGuide,
    });
  },

  /**
   * 关闭WiFi连接提示层
   */
  onCloseWifiTip() {
    this.setData({
      showWifiConnectTip: false,
    });
  },
});
